package cn.nawang.ebeim.api.repository.impl;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import cn.nawang.ebeim.api.bean.ClassBean;
import cn.nawang.ebeim.api.comm.PageList;
import cn.nawang.ebeim.api.comm.Pages;
import cn.nawang.ebeim.api.domain.FileChangeLog;
import cn.nawang.ebeim.api.utils.RefectSql;

/**
 * @ClassName: FileChangLogQueryRepositoryImpl
 * @Description: FileChangeLog dao层
 * @author 张建峰
 * @date 2015年9月25日16:31:22
 * @version v1.0
 */
@Repository
public class FileChangLogQueryRepositoryImpl{

  @Autowired
  private EntityManagerFactory entityManagerFactory;

  
  /**
   * @author 张建峰
   * @Description: 根据sql计算记录条数
   * @param @param sql
   * @param @param paramsList
   * @param @return
   * @return int 
   * @date 2015年9月25日16:32:33
   *
   * @修改人 张建峰
   * @修改日期
   */
  public int countData(String sql,List<Object> paramsList) {
    EntityManager em = entityManagerFactory.createEntityManager();
    int count=0;
    try{     
      Query query =  em.createQuery(sql);
      for (int i = 0; i < paramsList.size(); i++) {
        query.setParameter(i+1, paramsList.get(i));
      }
      count = query.getResultList().size();
      return count;
    }catch(Exception ex){
      ex.printStackTrace();
    }finally{
      em.close();
    }
    return count;
  }
  
  
  /**
   * @author 张建峰
   * @Description: 根据条件分页查询
   * @param @param t
   * @param @param page
   * @param @return
   * @return PageList 
   * @date 2015年9月25日16:32:38
   *
   * @修改人 张建峰
   * @修改日期
   */
  public PageList findByFileChangeLog(FileChangeLog t, Pages page) {
    PageList pl = null;
    String sql = "from FileChangeLog obj where '1'='1'";
    List<ClassBean> conditions = RefectSql.getClassBeans(t);
    List<Object> paramsList = new ArrayList<Object>();
    for (int i = 0; i < conditions.size(); i++) {
      ClassBean classBean = conditions.get(i);
      if(classBean.getContent()!=null){
          sql+=" and obj."+classBean.getName() + "= ?";
          paramsList.add(classBean.getContent());
      }
    }
    sql+=" order by obj.logTime desc";
    
    int count = this.countData(sql,paramsList);
    page.setTotalRecord(count);
    page.setTotalPage((int)Math.ceil((count*1.0)/page.getPageSize()));
    EntityManager em = entityManagerFactory.createEntityManager();
    try{
      Query query =  em.createQuery(sql);
      for (int i = 0; i < paramsList.size(); i++) {
        query.setParameter(i+1, paramsList.get(i));
      }
      query.setFirstResult(page.getStartPos());
      query.setMaxResults(page.getPageSize());
      List objList = query.getResultList();
      pl = new PageList();
      pl.setObjList(objList);
      pl.setPage(page);
      pl.setSuccess(true);
    }catch(Exception ex){
      ex.printStackTrace();
    }finally{
      em.close();
    }
    return pl;
  }
  
  /**
   * @author 张建峰
   * @Description: 根据某个属性查询列表
   * @param @param property
   * @param @param value
   * @param @return
   * @return List<FileChangeLog> 
   * @date 2015年9月25日16:32:43
   *
   * @修改人 张建峰
   * @修改日期
   */
  public List<FileChangeLog> findByParam(String property,Object value) {
    List objList = null;
    String sql = "from FileChangeLog t where t."+property+" = ?";
    EntityManager em = entityManagerFactory.createEntityManager();
    try{
      Query query =  em.createQuery(sql);
      query.setParameter(1, value);
      objList = query.getResultList();
    }catch(Exception ex){
      ex.printStackTrace();
    }finally{
      em.close();
    }
    return objList;
  }

}
